//
//  WBStatusViewModel.swift
//  WBWeiBo
//
//  Created by 王斌 on 16/7/13.
//  Copyright © 2016年 王斌. All rights reserved.
//

import UIKit

//  处理微博模型显示的内容,对应的视图是 首页自定义cell

class WBStatusViewModel: NSObject {
    
    //   在这里出事显示内容的逻辑....
    
    //   转发数显示内容
    var retweetStr:String?
    
    //   评论数显示内容
    var commentStr:String?
    
    //   赞数显示内容
    var unlikeStr:String?
    
    //  处理转发微博内容拼接"@xx:xxxx"
    var retweetContent:String?
    
    //  会员等级图片
    var mbrandImage:UIImage?
    
    //  来源内容
    var sourceContent:String?
    
    //  认证类型等级图片
    var verifiedTypeImage:UIImage?
    
    
    //  考虑计算属性 - 原因是每次滚动cell的都需要跟我们的当前时间进行对比
    
    /*
    1. 把时间对象转成需要字符串
    
    如果是今年
    判断是否是今天
    判断是否是在1分钟之前
    - 刚刚
    判断是否是在1小时之前
    - xxx分钟前
    其它
    - xx小时前
    
    判断是否是昨天
    - 昨天 10:10
    其他
    - 07-10 10:10
    
    如果不是今年
    - 2015-10-29 10:10
    
    
    
    */
    
    var timeStr: String? {
        //  判断发布微博时间是否为nil
        guard let createAtStr = self.status?.created_at else {
            
            return nil
        }
        
        return NSDate.sinaDate(createAtStr).sinaDateString
        
    }
    
    //  持有微博模型
    var status:WBStatus?
    init(status:WBStatus) {
        super.init()
        
        //  初始化持有的微博模型
        self.status = status
        
        retweetStr = handleCount(status.reposts_count, defaultTitle: "转发")
        commentStr = handleCount(status.comments_couny, defaultTitle: "评论")
        unlikeStr = handleCount(status.attitudes_count, defaultTitle: "赞")
        
        //  处理转发微博内容显示
        handleRetweetContent(status)
        
        //  处理会员等级图片
        handleMBrankImage(status.user?.mbrank ?? 0)
        
        //  处理来源字符串
        handleSourceContent(status.source ?? "")
        
        //  处理认证类型等级图片
        handleVerifiedTypeImage(status.user?.verified_type ?? 0)
        
        
    }
    
    // MARK : -  处理转发微博内容显示
    private func handleRetweetContent(status:WBStatus){
        
        if status.retweeted_status != nil{
            
            // 获取转发用户的名字
             guard let name = status.retweeted_status?.user?.screen_name, let text = status.retweeted_status?.text else{
                
                return
            }
            
            //  代码执行到此name和转发微博内容一定有值
            retweetContent = "@\(name):\(text)"
        }
    }
    
    
    // MARK : -  处理认证类型等级图片
    private func handleVerifiedTypeImage(verifiedType:Int){
        
        //  认证类型等级,认证类型 -1  没有认证, 0 认证用户, 2,3,5 企业认证   220 达人
        switch verifiedType{
            
        case 0:
             //  认证用户
            verifiedTypeImage = UIImage(named: "avatar_vip")
            
        case 2,3,5:
            //  企业认证
            verifiedTypeImage = UIImage(named: "avatar_enterprise_vip")
        case 220:
            //  微博达人
            verifiedTypeImage = UIImage(named: "avatar_grassroot")
            
        default:
            verifiedTypeImage = nil
        }
    
    }
    
    
    // MARK : -  处理来源字符串
    private func handleSourceContent(source:String){
        
        //  '\'进行字符串转译
        guard let range1 = source.rangeOfString("\">"),let range2 = source.rangeOfString("</")else{
            
            return
        }
        
        //  代码执行到此,范围一定存在
        
        //  开始光标位置
        let startIndex = range1.endIndex
        
        //  结束光标位置
        let endIndex = range2.startIndex
        
        //  截取字符串
        sourceContent = "来自" + source.substringWithRange(startIndex..<endIndex)

    }
    
    
    
    // MARK : - 处理会员等级图片
    private func handleMBrankImage(mbrank:Int){
        
        if mbrank >= 1 && mbrank <= 6 {
            
            let image = UIImage(named: "common_icon_membership_level\(mbrank)")
            mbrandImage = image
        }
    }
    
    
    // MARK : -  处理转发微博内容显示
    private func handRetweetContent(status:WBStatus){
        
        if status.retweeted_status != nil{
            
            // 获取转发用户的名字
            guard let name = status.retweeted_status?.user?.screen_name,
                let text = status.retweeted_status?.text else{
                    
                    return
            }
            
            //  代码执行到此name和转发微博内容一定有值
            retweetContent = "@\(name):\(text)"
        }
    }
    
    
    
    
    // MARK : -  处理显示 转发, 评论, 赞的数据样式
    /*
    1. 判断count 是否 大于 0
    - 判断 count 是否大于等于10000
    - 对10000这样的数据进行格式化处理
    - 否则 - 直接显示应有的数字
    否则显示默认标题
    
    */
    private func handleCount(count:Int,defaultTitle:String) ->String{
        
        if count > 0{
            if count >= 10000{
                //  进行格式化处理
                let result = Float(count / 1000) / 10
                
                var resultStr = "\(result)万"
                
                if resultStr.containsString(".0"){
                    
                    resultStr = resultStr.stringByReplacingOccurrencesOfString(".0", withString: "")
                }
                
                return resultStr
                
            }else{
                return"\(count)"
            }
        }else{
            return defaultTitle
        }
    }

}
